﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//main141&142&143：文件写入字符串及fgets块读取完成行读文本
int main141()
{
	char* p = "hello world\n";//hello world-->hello world\n
	FILE* fp = fopen("../../../file/FileLineWrite.txt", "w");
	if (!fp)
	{
		return -1;
	}
	//1.fputs只会将字符串常量p的有效字符，写入到文件中，不会写入p的末尾\0；末尾是\n，写入的文件中内容，会自动换行；
	fputs(p, fp);
	fclose(fp);

	system("pause");
	return EXIT_SUCCESS;
}
int main142(void)
{
	FILE* fp = fopen("../../../file/FileLineRead.txt", "r");
	if (!fp)
	{
		return -1;
	}

	//7.若buf的长度为5，则fgets(buf,5,fp)，就变成每次读取5-1=4个字符。因为每次读取到的字符串结尾都会添加一个\0，作为
		//结束标识。此时，第一次：hell\0，第二次：o wo\0，第三次：rld\n\0，第四次：你好  。fgets为块读取。
	char buf[1024];
	fgets(buf, 1024, fp);

	//3.fgets只能读取一行字符串，以\n为结尾，第二行是读取不到的。注意：FileLineRead.txt文件的编码必须为gb2312格式；
	printf("2.输出从FileLineRead.txt中读取到的字符串：%s", buf);//hello world\n-->hello world\n

	//4.读取FileLineRead.txt中的第二行的数据，先将buf初始化为0;
	memset(buf, 0, 1024);
	fgets(buf, 1024, fp);
	printf("5.读取FileLineRead.txt的第二行数据，并输出：%s", buf);//你好 宝贝\n

	memset(buf, 0, 1024);
	fgets(buf, 1024, fp);
	printf("6.读取FileLineRead.txt的第三行数据，并输出：%s", buf);//你瞅啥\n
	fclose(fp);

	return 0;
}
int main143(void)
{
	FILE* fp = fopen("../../../file/FileLineRead.txt", "r");
	if (!fp)
	{
		return -1;
	}

	//char buf[1024 * 1024];	1M
	char* buf = (char*)malloc(sizeof(char) * 1024);
	//8.feof判断文件流是否到结尾，EOF判断字符是否到结尾；
	while (feof(fp) == 0)
	{
		memset(buf, 0, 1024);
		fgets(buf, 1024, fp);
		printf("9.从FileLineRead.txt中读取内容，并输出读取到的该行内容：%s", buf);
	}

	/*9.从FileLineRead.txt中读取内容，并输出读取到的该行内容：hello world
	9.从FileLineRead.txt中读取内容，并输出读取到的该行内容：你好 宝贝
	9.从FileLineRead.txt中读取内容，并输出读取到的该行内容：你瞅啥
	9.从FileLineRead.txt中读取内容，并输出读取到的该行内容：弄啥嘞
	9.从FileLineRead.txt中读取内容，并输出读取到的该行内容：
	*/

	free(buf);
	fclose(fp);

	return 0;
}